/***************************************************************************
 *   Copyright (C) 2007 by Alexandre Masselot,,,   *
 *   alex@alex-laptop   *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this program; if not, write to the                 *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#ifndef BOLRUNLCMSMSREADER_H
#define BOLRUNLCMSMSREADER_H

#include <fstream>
#include "runlcmsms.h"

namespace bol {

/**
  @author Alexandre Masselot,,, <alex@alex-laptop>
 */
  class RunLcmsmsReader{
    private:
      istream* m_inputStream;

      Pchargemask m_defaultcharge;
    public:
      RunLcmsmsReader();

      ~RunLcmsmsReader();

    /**
       * init the reader(set inout stream, default paramters...)
       * @param run the run to be modified
     */
      virtual void init(RunLcmsms& run, istream* input)=0;

    /**
       * read a run frmo a given file name
       * @param run the run that will be fed
       * @param filename
     */
      void read(RunLcmsms& run, const string& filename);
      
    /**
       * read a run frmo a given file stream
       * @param run the run that will be fed
       * @param filename
     */
      void read(RunLcmsms& run, istream* input);

    /**
       * read the next input from the stream
       * @param run
       * @return the last inserted soectrum (or NULL if end was reached)
     */
      virtual SpectrumLcmsms* nextSpectrum(RunLcmsms& run)=0;

      void setDefaultcharge(const Pchargemask& theValue) {
        m_defaultcharge = theValue;
      }
  

      Pchargemask defaultcharge() const {
        return m_defaultcharge;
      }

  void setInputStream(istream* theValue) {
      m_inputStream = theValue;
  }
  

  istream* inputStream() const {
      return m_inputStream;
  }
  
  

  };

}

#endif
